package com.learn.english.utils;

import com.learn.english.constants.TestAccountConstants;
import com.learn.english.mapper.UserMapper;
import com.learn.english.model.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

import java.math.BigDecimal;

/**
 * 用户账号生成工具类
 * 用于生成测试用的普通用户账号
 */
@SpringBootTest
public class UserAccountGenerator {

    @Autowired
    private UserMapper userMapper;

    @Autowired
    private BCryptPasswordEncoder passwordEncoder;

    /**
     * 生成普通用户账号的测试方法
     */
    @Test
    public void generateTestUser() {
        // 检查用户是否已存在
        User existingUser = userMapper.queryByUsername(TestAccountConstants.TEST_USER_USERNAME);
        if (existingUser != null) {
            System.out.println("用户已存在: " + TestAccountConstants.TEST_USER_USERNAME);
            return;
        }

        // 生成用户ID
        Long userId = generateUserId();
        String uid = new BigDecimal(1000000).add(BigDecimal.valueOf(userId)).toString();

        // 加密密码
        String encodedPassword = passwordEncoder.encode(TestAccountConstants.TEST_USER_PASSWORD);

        // 创建用户对象
        User user = User.builder()
                .id(userId)
                .username(TestAccountConstants.TEST_USER_USERNAME)
                .password(encodedPassword)
                .email(TestAccountConstants.TEST_USER_EMAIL)
                .uid(uid)
                .avatarUrl("/avatar/get?url=default.png")
                .roleId(TestAccountConstants.TEST_USER_ROLE_ID) // 普通用户角色ID
                .status((byte) 1) // 激活状态
                .isDeleted((byte) 0) // 未删除
                .build();

        // 插入数据库
        int result = userMapper.addUser(user);
        if (result > 0) {
            System.out.println("用户账号创建成功!");
            System.out.println("用户名: " + TestAccountConstants.TEST_USER_USERNAME);
            System.out.println("密码: " + TestAccountConstants.TEST_USER_PASSWORD);
            System.out.println("邮箱: " + TestAccountConstants.TEST_USER_EMAIL);
            System.out.println("用户ID: " + userId);
            System.out.println("用户UID: " + uid);
        } else {
            System.out.println("用户账号创建失败!");
        }
    }

    /**
     * 生成用户ID的辅助方法
     */
    private Long generateUserId() {
        Integer maxId = userMapper.queryMaxId();
        return maxId == null ? 1L : maxId + 1L;
    }
    
    /**
     * 独立运行的主方法，用于在没有Spring Boot环境时生成用户
     */
    public static void main(String[] args) {
        // 输出账号信息常量
        System.out.println("测试账号常量:");
        System.out.println("用户名: " + TestAccountConstants.TEST_USER_USERNAME);
        System.out.println("密码: " + TestAccountConstants.TEST_USER_PASSWORD);
        System.out.println("邮箱: " + TestAccountConstants.TEST_USER_EMAIL);
        System.out.println("\n注意: 要实际创建用户，请运行generateTestUser()测试方法");
        System.out.println("管理员账号: " + TestAccountConstants.ADMIN_USERNAME);
    }
}